package com.alibaba.shop.provider.third;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.util.StringUtils;

import java.io.ByteArrayInputStream;
import java.util.Date;

public class AliOssUtil {
    // Region请按实际情况填写
    public static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
    public static final String KEY = "LTAI5tFXZPpgqXFVx8cF4ecN";
    public static final String KEYSECFET = "kbSLoPTsekYvOpPhgfXPLDKcRXewNq";
    //存储空间名称
    public static final String BUCKET="dateshop";
    //客户端对象，用于管理存储空间和文件等OSS资源，可以有一个或多个OSSClient。OSSClient可以并发使用
    public static OSS ossClient;
    static {
         ossClient= new OSSClientBuilder().build(ENDPOINT, KEY, KEYSECFET);
    }

    /**
     * 资源上传
     * @param objname 对象名称
     * @param data 数据内容
     * @param urlDate 访问地址的失效时间
     * @return 访问地址*/
    public static String upload(byte[] data,String objname,Date urlDate){
        //1.校验对象名是否存在
        if(!checkName(objname)) {
            //2.上传资源到oss服务器
            PutObjectResult result = ossClient.putObject(BUCKET, objname, new ByteArrayInputStream(data));
            //3.验证上传的结果
            if (StringUtils.hasLength(result.getETag())) {
                //4.成功，返回访问地址
                return createURL(objname, urlDate);
            }
        }
        return null;
    }
    /**
     * 生成OSS的访问地址
     * @param objname oss对象名称
     * @param date 访问地址的有效期*/
    public static String createURL(String objname, Date date){
        return ossClient.generatePresignedUrl(BUCKET,objname,date).toString();
    }
    /**
     * 验证对象名是否存在
     * @return 如果返回值为true，则文件存在，否则存储空间或者文件不存在*/
    public static boolean checkName(String objname){
        return ossClient.doesObjectExist(BUCKET,objname);
    }
    /**
     * 删除OSS文件*/
    public static boolean del(String objname){
         ossClient.deleteObject(BUCKET,objname);
         return true;
    }
}
